昨天聊了怎麼搬東西進去遠端的 Linux 工作站,但 APR 工程師的日常工作,並不是直接在那個工作站上開幾個 terminal 就作業,而是會透過這個叫 LSF 的系統,把要做的事情提交到公司的運算農場(Compute Farm),讓裡面的機器幫我們做事,有點像是 AWS ,國網中心的那種概念。而接下來我們要做的 flow tracer ,也將會高度與 LSF 的機制配合 ( 雖然,理論上重寫監控的機制也是能無痛應用到其他地方 )。
今天的目標很單純,就是先在自己電腦上搭一套可以拿來練習的 LSF 環境
不用準備機房、不用準備伺服器,只要一台 Windows 加上 WSL 就可以開始
1992 年 ── 周松年等人於加拿大創立 Platform Computing,推出 Platform LSF
│
2002 年 ── 釋出 LSF 4.2 的開源版本 (GPL 授權)
│
2007 年 ── 開源社群基於 LSF 4.2 建立 OpenLava (高度相容的免費排程器)
│
2012 年 ── IBM 收購 Platform Computing,取得 LSF 與 Symphony 智慧財產權
│
2015 年 ── IBM 重組產品線,Platform LSF 更名為 IBM Spectrum LSF
│
2016–2018 年 ── IBM 提告,OpenLava 終止 2.0 以後的服務
我原本也是這樣想的,實際去做之才後發現

我還有特地開 VPN 跳到美國測試 = ^ =
可能一般民眾難以合法取得可直接安裝與練習的 IBM Spectrum LSF
但我們的目的只是想學一些 LSF 的指令與應用,花一堆時間跟 IBM Portal 奮戰其實沒太大意義
由於 IBM 收購 Platform,OpenLava 與商業版 LSF 的著作權,只有 2.0 及以下的版本才是最沒有爭議,你也能夠在 github 上找到對應的版本,至於 OpenLava 3.x / 4.x,你可能會在西台灣的網站上找到不少備份載點,使用應該是合法的,散播就不合法了,就留給各位自己斟酌 XD
Window
└── WSL2 Ubuntu 24.04
└── OpenLava x.
├── LIM
├── RES
├── SBATCHD
└── MBATCHD —→ Master Host 才需要起
本質上只有一台機器,他同時會是:
這對練習而言已經完全足夠,沒必要去搞另一台電腦當 Execution Host ,但如果你手上剛好有空閒的電腦或雲端機器的話 ,你確實可以嘗試看看,注意Batch machine 也要裝好 openlava ,設定好 ssh ,然後你要用 NFS 把資料夾都掛在一起,看起來會像這樣
[ NFS Server ( Master / Storage ) ]
│ 共享 /data 與 /home
├───► [ Batch Machine 1 ] (掛載到 /data, /home)
├───► [ Batch Machine 2 ] (掛載到 /data, /home)
└───► [ Batch Machine 3 ] (掛載到 /data, /home)
sudo apt-get update
sudo apt-get install -y \
build-essential \
tcl-dev \
libncurses-dev \
libtirpc-dev \
libnsl-dev
# build-essential gcc / make 等編譯工具
# tcl-dev OpenLava 編譯需要 Tcl
# libncurses-dev 終端相關函式庫
# libtirpc-dev 提供 rpc/types.h(新版 glibc 已移除舊 RPC 標頭)
# libnsl-dev 提供 rpcsvc/ypclnt.h(NIS/YP 標頭)
因為我們是單機,主機名稱設為 master
sudo hostnamectl set-hostname master
編輯 /etc/hosts,讓 master 對應本機真實 IP(不可以填錯)
127.0.0.1 localhost master
確認一下
getent hosts master
ping -c1 master
Note:OpenLava 會以 hostname 找 master。若 hosts 指到錯誤 IP,會造成有些指令像lsid 可能仍可用,但 bhosts 這類的指令會失敗。
configure / make / make install
把你的 openlava 解壓縮後進入,然後
./configure --prefix=/opt/openlava \
CFLAGS="-I/usr/include/tirpc -fcommon" \
CPPFLAGS="-I/usr/include/tirpc" \
LIBS="-ltirpc -lnsl"
make -j 16
sudo make install
安裝後的目錄 looks like
/opt/openlava/
bin/ # lsid、bhosts、bsub 指令
sbin/ # lim、res、sbatchd、mbatchd 服務
etc/ # 設定檔
lib/ # 函式庫
log/ # daemon log
work/
make install 不完整部署設定,需手動複製:
sudo cp -rf /你的 openlava 路徑/config/* /opt/openlava/etc/
sudo cp -f /opt/openlava/etc/openlava /etc/init.d/
sudo cp -f /opt/openlava/etc/openlava.sh /etc/profile.d/
sudo cp -f /opt/openlava/etc/openlava.csh /etc/profile.d/
sudo chmod 755 /etc/init.d/openlava
帳號名稱需與 lsf.cluster.openlava 中的 Administrators 一致
sudo groupadd --system openlava
sudo useradd --system -g openlava -d /opt/openlava -s /sbin/nologin openlava
sudo mkdir -p /opt/openlava/work/openlava/logdir
sudo chown -R openlava:openlava /opt/openlava
一些主要設定檔介紹
| 檔案 | 用途 |
|---|---|
/opt/openlava/etc/lsf.conf |
路徑、埠號、認證等主設定 |
/opt/openlava/etc/lsf.cluster.openlava |
主機清單與管理員 |
/opt/openlava/etc/lsf.shared |
叢集名稱、資源定義 |
/opt/openlava/etc/lsb.queues |
佇列定義 |
/opt/openlava/etc/lsb.hosts |
主機 / 主機群組 |
編輯 /opt/openlava/etc/lsf.cluster.openlava:! 表示該欄資訊讓他自己找
Begin ClusterAdmins
Administrators = openlava
End ClusterAdmins
Begin Host
HOSTNAME model type server r1m RESOURCES
master ! ! 1 - ()
End Host
HOSTNAME 必須與 /etc/hosts / DNS 名稱完全一致lsf.conf)LSF_LIM_PORT=16322
LSF_RES_PORT=16323
LSB_MBD_PORT=16324
LSB_SBD_PORT=16325
確認一下這些埠未被其他程式占用 (通常不會)
啟動與驗證
source /opt/openlava/etc/openlava.sh
sudo /opt/openlava/etc/openlava start
最後看一下 Port 有沒有東西
ss -lntup | grep 1632

基本指令測試
lsid # 顯示 cluster / master 名稱
lsload # 查看負載
lshosts # 查看主機系統資訊
bhosts # 查看批次主機狀態,因為我們只有一台,所以就是自己
bqueues # 查看佇列,一般公司內部都會有很多不同的 queue,不同 queue 裡面有規個,數量不等的批次主機
bsub <cmd> # 提交工作,我們主要就是透過這個去丟工作
bjobs # 查看工作狀態
bkill <jobid> # 終止工作
badmin reconfig # 重載批次設定
lsadmin reconfig # 重載 LSF/LIM 設定
打鐵趁熱,我們馬上來提交第一份自己的 job 吧,touch 一個檔案叫 test.sh
#!/bin/bash
for i in {10..60..10}; do
sleep 10
echo "模擬程式 --- 現在過了 ${i} 秒"
done
# -q 把 job 丟到 normal 這個 queue 裡面,lsf 會自動去找有空閒的機器去做的 job
# -n 這個 job 要占用幾個 CPU
# -o 這個 job 的執行 log
# -e 這個 job 的執行 error
bsub -q normal -n 1 -o test.log -e test.err ./test.sh
這時候你下 bjob 就可以看到提交的工作了